package com.huige.controller;

import com.huige.pojo.User;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author 朱志辉
 * @Create 2024/7/20 下午5:28
 * @Version 1.0
 * Description:
 */
@Controller
@RequestMapping("user")
@ResponseBody
public class UserController {

    //接受用户数据。用户有校验注解
    /**
     *  步骤一：实体类属性添加校验注解
     *  步骤二：在方法上添加@Validated注解
     *  细节：param | json 校验注解都有效果
     *       json参数-@RequestBody
     *
     *
     *   如果，不符合校验规则，直接向前端抛出异常！
     *   接受错误绑定信息！自定义返回结果！ 约定：参数错误 -》{code：400} -》前端
     *   捕捉错误信息绑定错误信息：
     *        1.handler(校验对象，BindingResult bindingResult) 要求：bindingResult必须紧挨着 校验对象
     *        2.BindingResult获取绑定错误
     * @param user
     * @return
     */
    @PostMapping("registerUser")
    public Object registerUser(@Validated @RequestBody User user,BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            //有绑定错误，就不直接返回了，由我们自己决定！
            Map data=new HashMap();
            data.put("code", 400);
            data.put("msg","参数校验异常了！");
            return  data;

        }
        System.out.println("user = " + user);
        return user;
    }

    @GetMapping("data")
    public String data() {
        //空指针异常
        System.out.println("UserController.data");
        String name = null;
        //name.toString();//空指针异常  NullPointerException
        return "ok";
    }

    @GetMapping("data1")
    public String data1() {
        //算数异常
        System.out.println("UserController.data1");
        //int i = 1 / 0;//算数异常  ArithmeticException
        return "ok";
    }

}
